<?php

/**
 * facturaordinaria actions.
 *
 * @package    sf_sandbox
 * @subpackage facturaordinaria
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class facturaordinariaActions extends sfActions {

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeIndex(sfWebRequest $request) {
        $this->forward404Unless($this->unidad_funcional = Doctrine_Core::getTable('UnidadFuncional')->find(array("2")), sprintf('Object unidad_funcional does not exist (%s).', "1"));
    }

    public function executeFiltro(sfWebRequest $request) {
        $idTipoComprobante =  TipoComprobanteTable::getId("FO");
        $this->getUser()->setAttribute("idTipoComprobante",$idTipoComprobante );
        $this->getUser()->setAttribute("itemsconceptos", Array());
        $comprobante = ComprobanteTable::getUltimo();
        if(count($comprobante)> 0){
            $this->nrocomprobante = $comprobante['nro_comprobante']+1;
        }else{
            $this->nrocomprobante = 1;
        }
        $this->getUser()->setAttribute("nrocomprobante", $this->nrocomprobante);
        
    }
    public function executeBuscar(sfWebRequest $request) {
        $this->setLayout("busqueda");
    }

    public function executeBuscarConceptos(sfWebRequest $request) {
        $this->setLayout("busqueda");
    }

    protected function getPager($q, $page, $model) {
        $pager = new sfDoctrinePager($model, sfConfig::get('app_nro_x_pagina_contribuyente'));
        $pager->setQuery($q);
        $pager->setPage($page);
        $pager->init();

        return $pager;
    }

    public function executeFiltrarConceptos(sfWebRequest $request) {

        if ($request->isMethod('post')) {
            $nombre = $request->getPostParameter("nombre");
        } else {
            $nombre = $request->getGetParameter("nombre");
        }
        $this->conceptos = $this->getPager(ConceptoTable::getBuscarConceptos($nombre), $request->getGetParameter('page'), "Concepto");
        if ($request->isXmlHttpRequest()) {
            return $this->renderPartial("facturaordinaria/listadoconceptos", array('conceptos' => $this->conceptos));
        }
    }

    public function executeFiltrarUnidadesFuncionales(sfWebRequest $request) {
        if ($request->isMethod('post')) {
            $dato = $request->getPostParameter("dato");
        } else {
            $dato = $request->getGetParameter("dato");
        }

        $this->unidadesFuncionales = $this->getPager(UnidadFuncionalTable::getBuscarUnidadesPopUp($dato), $request->getGetParameter('page'), "UnidadFuncional");
        if ($request->isXmlHttpRequest()) {
            return $this->renderPartial("facturaordinaria/resultadoUnidadesFuncionales", array('unidadesFuncionales' => $this->unidadesFuncionales));
        }
    }

    public function executeAgregar(sfWebRequest $request) {
        $itemsconceptos = $this->getUser()->getAttribute("itemsconceptos");
        $id = $request->getGetParameter("id");
        $concepto  = Doctrine_Core::getTable('Concepto')->find(array($request->getParameter('id')));
        $itemsconceptos[$id]['iduf'] =  $request->getGetParameter("iduf");       
        $itemsconceptos[$id]['id'] = $id;
        $itemsconceptos[$id]['codigo'] = $concepto->getCodigo();
        $itemsconceptos[$id]['nombre'] = $concepto->getNombre();
        $itemsconceptos[$id]['precio'] = $request->getParameter("precio");
        $itemsconceptos[$id]['cuenta'] = $concepto->getCuenta();
        
        $this->getUser()->setAttribute("itemsconceptos", $itemsconceptos);
        return $this->renderPartial("facturaordinaria/itemsconceptos", array('itemsconceptos' => $itemsconceptos));
    }
    public function executeEliminar(sfWebRequest $request){
        $pos = $request->getParameter("id");
        $itemsconceptos = $this->getUser()->getAttribute("itemsconceptos");
        unset($itemsconceptos[$pos]);
        $this->getUser()->setAttribute("itemsconceptos", $itemsconceptos);
        return $this->renderPartial("facturaordinaria/itemsconceptos", array('itemsconceptos' => $itemsconceptos));
    }
   
 private function guardarFactura($itemsconceptos,$nro_comprobante,$iduf){
        $this->getUser()->getAttribute("idTipoComprobante");
        $fo = new Comprobante();
        $fo->setCategoriaAguaId(1);
        $fo->setFechaEmision(date("Y-m-d h:i:s"));
        $fo->setNroComprobante($nro_comprobante);
        $fo->setUnidadFuncionalId($iduf);
        $fo->setTipoComprobanteId($this->getUser()->getAttribute("idTipoComprobante"));
        $fo->save();
       
     //recorro cada uno de los items para ir agregando a la linea comprobante         
       foreach ($itemsconceptos as $i => $item){
        $fol = new LineaComprobante();
        $fol->setComprobanteId($fo->getId());
        $fol->setValor($item['precio']);
        $fol->setConceptoId($item['id']);
        $fol->save();
        }
        //registro el pago despues de haber guardado la factura 
//        $pago = new Pago();
//        $pago->setFormaPagoId(1);
//        $pago->setFechahora(date('Y-m-d H:i:s'));
//        $pago->save();
//        $pago_linea = new PagoLinea();
//        $pago_linea->setPagoId($pago->getId());
//        $pago_linea->setComprobanteId($fo->getId());
//        $pago_linea->setMora(0);
//        $pago_linea->save();
        return $fo->getNroComprobante();
 }
    
 public function executeCrearfactura(sfWebRequest $request){
        $itemsconceptos = $this->getUser()->getAttribute("itemsconceptos");
        $nro_comprobante= $this->getUser()->getAttribute("nrocomprobante");
        foreach ($itemsconceptos as $i => $item){
          $iduf = $item['iduf'];
        }
        try{
            $nrofo = $this->guardarFactura($itemsconceptos,$nro_comprobante,$iduf);
            $this->getUser()->setFlash('notice', "La factura se registró con el número: ".$nrofo);
        }catch(Exception $e){
            $this->getUser()->setFlash('error', $e->getMessage());
        }
        
        
        $unidad_funcional = Doctrine_Core::getTable('UnidadFuncional')->find(array($iduf));
        $lectura = array();
        $conceptosfijos = array();
        
        $html = $this->getPartial('facturaconsumo/factura', array('unidadfuncional' => $unidad_funcional,'conceptos' => $itemsconceptos,'lectura' => $lectura,'conceptosfijos' => $conceptosfijos));
       
        $config = sfTCPDFPluginConfigHandler::loadConfig();

          // pdf object
          $pdf = new sfTCPDF();

          // set document information
          $pdf->SetCreator(PDF_CREATOR);
          $pdf->SetAuthor('NORDSOFT');
          //$pdf->SetTitle('Planilla Relevamiento de Lecturas');
         // set default header data
          $pdf->SetHeaderData("", "", PDF_HEADER_TITLE, "Servicio de administración y provisión de agua potable");

          // set header and footer fonts
          $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
          $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

          // set default monospaced font
          $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

          //set margins
          $pdf->SetMargins(PDF_MARGIN_LEFT,25, PDF_MARGIN_RIGHT);
          $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
          $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

          //set auto page breaks
          $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

          //set image scale factor
          $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

          // ---------------------------------------------------------

          // set default font subsetting mode
          $pdf->setFontSubsetting(true);

          // Set font
          // dejavusans is a UTF-8 Unicode font, if you only need to
          // print standard ASCII chars, you can use core fonts like
          // helvetica or times to reduce file size.
          $pdf->SetFont('dejavusans', '', 14, '', true);

          // Add a page
          // This method has several options, check the source code documentation for more information.
          $pdf->AddPage();

          // Set some content to print
         

          // Print text using writeHTMLCell()
          $pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);

          // ---------------------------------------------------------

          // Close and output PDF document
          // This method has several options, check the source code documentation for more information.
          $pdf->Output('example_001.pdf', 'I');
         
          // Stop symfony process
          throw new sfStopException();
          
      }

}
